home *** CD-ROM | disk | FTP | other *** search
- {
-
- The fastest way to read screen characters is to get them from video
- memory directly. It's located at either Segment B800h (Color) or
- Segment B000h (Monochrome). Each character is stored as two bytes, the
- Ascii code and an Attribute byte. Here is some source if you are
- confused.
-
- { ********************************************************** }
- { *********************** Text Unit ************************ }
- { ********************************************************** }
- { **************** Written by: Rick Haines ***************** }
- { **************************** 507 LakeShore Dr. *********** }
- { **************************** Eustis FL, 32726 ************ }
- { ********************************************************** }
- { ***************** Last Revised 11/12/94 ****************** }
- { ********************************************************** }
-
- Unit Text;
-
- { ************************* Attribute Byte ************************* }
- { ****************************************************************** }
- { ************** Bits 0-3 contain the foreground color ************* }
- { ************** Bits 4-6 contain the background color ************* }
- { ******************** Bit 7 is the blink bit ********************** }
- { ****************************************************************** }
-
- Interface
-
- Const
- Black = 0;
- Blue = 1;
- Green = 2;
- Cyan = 3;
- Red = 4;
- Violet = 5;
- Orange = 6;
- Gray = 8;
-
- LightGray = 7;
- LightBlue = 9;
- LightGreen = 10;
- LightCyan = 11;
- LightRed = 12;
- LightViolet = 13;
-
- Yellow = 14;
- White = 15;
-
- Blink = 128;
-
- Procedure WriteXY(X, Y : Byte; TextStr : String);
- Procedure SetColor(Color : Byte);
- Procedure SetBGColor(Color : Byte);
- Procedure SaveScreen(Name : String);
- Procedure LoadScreen(Name : String);
-
- Implementation
- Uses Crt;
-
- Type
- RefreshBuffer = Array[0..24,0..79] Of Word;
-
- Var
- TextMem : ^RefreshBuffer;
- TextColor : Byte;
-
- Procedure SetColor(Color : Byte);
- Begin
- TextColor := TextColor Or Color;
- End;
-
- Procedure SetBGColor(Color : Byte);
- Begin
- If Color > 8 Then Exit;
- Asm
- Mov AL, [Color]
- Mov BL, [TextColor]
- RoR BL, 4
- Or BL, AL
- RoL BL, 4
- Mov [TextColor], BL
- End;
- End;
-
- Function TextChar(Ch : Char) : Word; Assembler;
- Asm
- Mov AH, TextColor
- Mov AL, Ch
- End;
-
- Procedure WriteXY(X, Y : Byte; TextStr : String);
- Var
- I : Byte;
- Begin
- For I := 1 To Length(TextStr) Do TextMem^[Y,X+I-1] := TextChar(TextStr[I]);
- End;
-
- Procedure SaveScreen(Name : String);
- Var
- FileN : File;
- Begin
- Assign(FileN, Name + '.Scr');
- Rewrite(FileN, 2000);
- BlockWrite(FileN, TextMem^, 2);
- Close(FileN);
- End;
-
- Procedure LoadScreen(Name : String);
- Var
- FileN : File;
- Begin
- Assign(FileN, Name + '.Scr');
- Reset(FileN, 2000);
- BlockRead(FileN, TextMem^, 2);
- Close(FileN);
- End;
-
- Begin
- If LastMode = Mono Then TextMem := Ptr($B000,$0000) Else TextMem := Ptr($B800,
- SetBGColor(Black);
- SetColor(LightGray);
- End.
-
-
- Good Luck,
-
- -Rick
-
-
- * OLX 2.1 TD * With Pascal Do Write(Program);
-
-
- --- QScan v1.12b / 01-0240
- * Origin: Craig's DATA Exchange! BBS 1:3669/50 904-483-2463 (1:3669/50)
- SEEN-BY: 363/3 34 118 157 603 1571 396/1 3615/50 51 3633/132
- SEEN-BY: 3669/18 50 54
- PATH: 3669/50 54 363/157 3615/50
-